package body Server_Package is

	-- inizializzazione dei termini per il client
	procedure Init (F : out Field_Access; B : out Ball_Access; Tm : out TimeCount_Access; Tmr : out Timer_Access) is
	begin
		
		F := F;
		B := B;
		Tm := Tm;
		Tmr := Tmr;
		Cl := Cl + 1;

	end Init;

	procedure Server is
	
		-- la procedura server inizializza il task SERVER che accetta i client (counter fino a 2)
		-- per poi far partire l'inizializzazione delle componenti
	
		-- il server inizializza le sue componenti (Field, Ball, Timer, TaskBall, Referee)
		-- e 2 client connessi (Player, Manager, Team, GUI con Gtk)
	
		Cl : Integer := 0;
	
		N : constant := 22; -- number of players. 

		F : Field_Access := new Field(N);
		B : Ball_Access := new Ball(F);
		Tm : TimeCount_Access := new TimeCount;
	
		-- inizializzazione del moviment della palla
		T : TaskBall_Access := new TaskBall(F, B, 40);

		-- creazione dei 2 task Client
		C1 : Client; -- := new Client;
		C2 : Client; -- := new Client;
		
		-- referee
		R : Referee_Access := new Referee (F, B);
	
		-- timer
		Tmr : Timer_Access;
			
		begin

			loop
			
				-- collegamento dei client
				-- un client collegato aumenta un contatore; quando Cl arriva a 2 inizializza il campo e i giocatori

				exit when Cl = 2;

			end loop;
	
			-- inizializzazione delle posizioni
			F.InitField;

			-- timer
			Tmr := new Timer(Tm, C1.T1, C2.T1, C1.M1, C2.M1, T);
		
	end Server;
	
end Server_Package;